package utils;

import lombok.Data;

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class CopyValue {
    public static void main(String[] args) {


        try {
            /**
             * 3)从一个map集合中拷贝到一个javabean中
             * 注意：
             * 	1）只拷贝javabean存在的哪些属性(setXXX方法)
             *  2)需要拷贝的数据是数组类型，那么只拷贝数组中的第一个元素。
             *
             */
//            ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
            Map map = new HashMap();
            //map.put("name", "jacky");
//            map.put("name", new String[]{"jacky", "eric"});//字符串数组
            map.put("id", "4");
            map.put("gender", "true");
            // map.put("scroe", "86.43"); // 当不符合javaBean规范的时候，就不会赋值进去，显示的就是默认值
            map.put("score", "86.43");
            map.put("birth", "2015-06-05");

            User2 user2 = new User2();
            //把一个map的数据拷贝到s2中
            copyMapToObject(map, user2);

            System.out.println(user2);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    // copy Map中的属性 到 实体类中
    public static void copyMapToObject(Map<String, Object> map, Object o) {
        Set<String> set = map.keySet();
        Class c = o.getClass();
        Field[] fields = c.getDeclaredFields();
        for (Field f : fields) {
            f.setAccessible(true);
            if (set.contains(f.getName())){
                try {
                    f.set(o, map.get(f.getName()));
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

@Data
class User2 {
    private String id;
    private String name;
}
